608060405234801561000f575f80fd5b5033604051806080016040528060438152602001613d20604391396100398161016a60201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100aa575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a19190610b22565b60405180910390fd5b6100b98161017d60201b60201c565b506040518060400160405280601d81526020017f5b207363616e20515220746f20636c61696d2072657761726473205d20000000815250600490816100fe9190610d75565b506040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250600590816101439190610d75565b50610165335f600160405180602001604052805f81525061024060201b60201c565b6111bb565b80600290816101799190610d75565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036102b0575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016102a79190610b22565b60405180910390fd5b5f806102c285856102e160201b60201c565b915091506102d95f8784848761031160201b60201c565b505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b610323858585856103d560201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146103ce575f61036561076b60201b60201c565b905060018451036103b7575f6103845f8661077260201b90919060201c565b90505f61039a5f8661077260201b90919060201c565b90506103b083898985858961078560201b60201c565b50506103cc565b6103cb81878787878761093460201b60201c565b5b505b5050505050565b805182511461041f57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610416929190610e53565b60405180910390fd5b5f61042e61076b60201b60201c565b90505f5b835181101561062a575f61044f828661077260201b90919060201c565b90505f610465838661077260201b90919060201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610588575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561053457888183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161052b9493929190610e7a565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461061d57805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106159190610eea565b925050819055505b5050806001019050610432565b5060018351036106e5575f6106485f8561077260201b90919060201c565b90505f61065e5f8561077260201b90919060201c565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516106d6929190610e53565b60405180910390a45050610764565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161075b929190610fd4565b60405180910390a45b5050505050565b5f33905090565b5f60208202602084010151905092915050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561092c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016107e5959493929190611079565b6020604051808303815f875af192505050801561082057506040513d601f19601f8201168201806040525081019061081d919061112a565b60015b6108a1573d805f811461084e576040519150601f19603f3d011682016040523d82523d5f602084013e610853565b606091505b505f81510361089957846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016108909190610b22565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461092a57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016109219190610b22565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115610adb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401610994959493929190611155565b6020604051808303815f875af19250505080156109cf57506040513d601f19601f820116820180604052508101906109cc919061112a565b60015b610a50573d805f81146109fd576040519150601f19603f3d011682016040523d82523d5f602084013e610a02565b606091505b505f815103610a4857846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610a3f9190610b22565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ad957846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610ad09190610b22565b60405180910390fd5b505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b0c82610ae3565b9050919050565b610b1c81610b02565b82525050565b5f602082019050610b355f830184610b13565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610bb657607f821691505b602082108103610bc957610bc8610b72565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bf0565b610c358683610bf0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c79610c74610c6f84610c4d565b610c56565b610c4d565b9050919050565b5f819050919050565b610c9283610c5f565b610ca6610c9e82610c80565b848454610bfc565b825550505050565b5f90565b610cba610cae565b610cc5818484610c89565b505050565b5b81811015610ce857610cdd5f82610cb2565b600181019050610ccb565b5050565b601f821115610d2d57610cfe81610bcf565b610d0784610be1565b81016020851015610d16578190505b610d2a610d2285610be1565b830182610cca565b50505b505050565b5f82821c905092915050565b5f610d4d5f1984600802610d32565b1980831691505092915050565b5f610d658383610d3e565b9150826002028217905092915050565b610d7e82610b3b565b67ffffffffffffffff811115610d9757610d96610b45565b5b610da18254610b9f565b610dac828285610cec565b5f60209050601f831160018114610ddd575f8415610dcb578287015190505b610dd58582610d5a565b865550610e3c565b601f198416610deb86610bcf565b5f5b82811015610e1257848901518255600182019150602085019450602081019050610ded565b86831015610e2f5784890151610e2b601f891682610d3e565b8355505b6001600288020188555050505b505050505050565b610e4d81610c4d565b82525050565b5f604082019050610e665f830185610e44565b610e736020830184610e44565b9392505050565b5f608082019050610e8d5f830187610b13565b610e9a6020830186610e44565b610ea76040830185610e44565b610eb46060830184610e44565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ef482610c4d565b9150610eff83610c4d565b9250828201905080821115610f1757610f16610ebd565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610f4f81610c4d565b82525050565b5f610f608383610f46565b60208301905092915050565b5f602082019050919050565b5f610f8282610f1d565b610f8c8185610f27565b9350610f9783610f37565b805f5b83811015610fc7578151610fae8882610f55565b9750610fb983610f6c565b925050600181019050610f9a565b5085935050505092915050565b5f6040820190508181035f830152610fec8185610f78565b905081810360208301526110008184610f78565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61104b82611009565b6110558185611013565b9350611065818560208601611023565b61106e81611031565b840191505092915050565b5f60a08201905061108c5f830188610b13565b6110996020830187610b13565b6110a66040830186610e44565b6110b36060830185610e44565b81810360808301526110c58184611041565b90509695505050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611109816110d5565b8114611113575f80fd5b50565b5f8151905061112481611100565b92915050565b5f6020828403121561113f5761113e6110d1565b5b5f61114c84828501611116565b91505092915050565b5f60a0820190506111685f830188610b13565b6111756020830187610b13565b81810360408301526111878186610f78565b9050818103606083015261119b8185610f78565b905081810360808301526111af8184611041565b90509695505050505050565b612b58806111c85f395ff3fe608060405234801561000f575f80fd5b50600436106100fd575f3560e01c80634e1273f411610095578063a22cb46511610064578063a22cb46514610295578063e985e9c5146102b1578063f242432a146102e1578063f2fde38b146102fd576100fd565b80634e1273f41461021f578063715018a61461024f5780638da5cb5b1461025957806395d89b4114610277576100fd565b80630e89341c116100d15780630e89341c1461019b5780632eb2c2d6146101cb57806343807e58146101e7578063441ff99814610203576100fd565b8062fdd58e1461010157806301ffc9a71461013157806302fe53051461016157806306fdde031461017d575b5f80fd5b61011b60048036038101906101169190611b6d565b610319565b6040516101289190611bba565b60405180910390f35b61014b60048036038101906101469190611c28565b61036e565b6040516101589190611c6d565b60405180910390f35b61017b60048036038101906101769190611dc2565b61044f565b005b610185610463565b6040516101929190611e69565b60405180910390f35b6101b560048036038101906101b09190611e89565b6104f3565b6040516101c29190611e69565b60405180910390f35b6101e560048036038101906101e09190612016565b610585565b005b61020160048036038101906101fc919061213a565b61062c565b005b61021d6004803603810190610218919061213a565b610696565b005b61023960048036038101906102349190612245565b610763565b6040516102469190612372565b60405180910390f35b61025761086a565b005b61026161087d565b60405161026e91906123a1565b60405180910390f35b61027f6108a5565b60405161028c9190611e69565b60405180910390f35b6102af60048036038101906102aa91906123e4565b610935565b005b6102cb60048036038101906102c69190612422565b61094b565b6040516102d89190611c6d565b60405180910390f35b6102fb60048036038101906102f69190612460565b6109d9565b005b610317600480360381019061031291906124f3565b610a80565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610448575061044782610b04565b5b9050919050565b610457610b6d565b61046081610bf4565b50565b6060600480546104729061254b565b80601f016020809104026020016040519081016040528092919081815260200182805461049e9061254b565b80156104e95780601f106104c0576101008083540402835291602001916104e9565b820191905f5260205f20905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b6060600280546105029061254b565b80601f016020809104026020016040519081016040528092919081815260200182805461052e9061254b565b80156105795780601f1061055057610100808354040283529160200191610579565b820191905f5260205f20905b81548152906001019060200180831161055c57829003601f168201915b50505050509050919050565b5f61058e610c07565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156105d357506105d1868261094b565b155b156106175780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161060e92919061257b565b60405180910390fd5b6106248686868686610c0e565b505050505050565b610634610b6d565b5f5b828290508110156106915761068433848484818110610658576106576125a2565b5b905060200201602081019061066d91906124f3565b5f600160405180602001604052805f815250610d02565b8080600101915050610636565b505050565b61069e610b6d565b5f5b8282905081101561075e578282828181106106be576106bd6125a2565b5b90506020020160208101906106d391906124f3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f625f600160405161074992919061264a565b60405180910390a480806001019150506106a0565b505050565b606081518351146107af57815183516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016107a6929190612671565b60405180910390fd5b5f835167ffffffffffffffff8111156107cb576107ca611c9e565b5b6040519080825280602002602001820160405280156107f95781602001602082028036833780820191505090505b5090505f5b845181101561085f5761083561081d8287610d1690919063ffffffff16565b6108308387610d2990919063ffffffff16565b610319565b828281518110610848576108476125a2565b5b6020026020010181815250508060010190506107fe565b508091505092915050565b610872610b6d565b61087b5f610d3c565b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546108b49061254b565b80601f01602080910402602001604051908101604052809291908181526020018280546108e09061254b565b801561092b5780601f106109025761010080835404028352916020019161092b565b820191905f5260205f20905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b610947610940610c07565b8383610dff565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6109e2610c07565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610a275750610a25868261094b565b155b15610a6b5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610a6292919061257b565b60405180910390fd5b610a788686868686610f68565b505050505050565b610a88610b6d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610af8575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610aef91906123a1565b60405180910390fd5b610b0181610d3c565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b75610c07565b73ffffffffffffffffffffffffffffffffffffffff16610b9361087d565b73ffffffffffffffffffffffffffffffffffffffff1614610bf257610bb6610c07565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610be991906123a1565b60405180910390fd5b565b8060029081610c03919061282c565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c7e575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610c7591906123a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610cee575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610ce591906123a1565b60405180910390fd5b610cfb858585858561106e565b5050505050565b610d0f858585858561111a565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e6f575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401610e6691906123a1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f5b9190611c6d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610fd8575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610fcf91906123a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611048575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161103f91906123a1565b60405180910390fd5b5f806110548585611140565b91509150611065878784848761106e565b50505050505050565b61107a85858585611170565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611113575f6110b6610c07565b90506001845103611102575f6110d55f86610d2990919063ffffffff16565b90505f6110eb5f86610d2990919063ffffffff16565b90506110fb838989858589611500565b5050611111565b6111108187878787876116af565b5b505b5050505050565b5f806111268585611140565b91509150611137878784848761185e565b50505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b80518251146111ba57815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016111b1929190612671565b60405180910390fd5b5f6111c3610c07565b90505f5b83518110156113bf575f6111e48286610d2990919063ffffffff16565b90505f6111fa8386610d2990919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461131d575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156112c957888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016112c094939291906128fb565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146113b257805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113aa919061296b565b925050819055505b50508060010190506111c7565b50600183510361147a575f6113dd5f85610d2990919063ffffffff16565b90505f6113f35f85610d2990919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161146b929190612671565b60405180910390a450506114f9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114f092919061299e565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156116a7578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611560959493929190612a25565b6020604051808303815f875af192505050801561159b57506040513d601f19601f820116820180604052508101906115989190612a91565b60015b61161c573d805f81146115c9576040519150601f19603f3d011682016040523d82523d5f602084013e6115ce565b606091505b505f81510361161457846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161160b91906123a1565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146116a557846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161169c91906123a1565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611856578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161170f959493929190612abc565b6020604051808303815f875af192505050801561174a57506040513d601f19601f820116820180604052508101906117479190612a91565b60015b6117cb573d805f8114611778576040519150601f19603f3d011682016040523d82523d5f602084013e61177d565b606091505b505f8151036117c357846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016117ba91906123a1565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461185457846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161184b91906123a1565b60405180910390fd5b505b505050505050565b61186a8585858561187e565b5f8190506060905060609150505050505050565b5f5b8251811015611a10575f61189d8285610d2990919063ffffffff16565b90505f6118b38385610d2990919063ffffffff16565b90505f805f8481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561194f57878183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161194694939291906128fb565b60405180910390fd5b8181035f808581526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808581526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119fb919061296b565b92505081905550505050806001019050611880565b505f611a1a610c07565b90505f611a305f85610d2990919063ffffffff16565b90505f611a465f85610d2990919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611abe929190612671565b60405180910390a450505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b0982611ae0565b9050919050565b611b1981611aff565b8114611b23575f80fd5b50565b5f81359050611b3481611b10565b92915050565b5f819050919050565b611b4c81611b3a565b8114611b56575f80fd5b50565b5f81359050611b6781611b43565b92915050565b5f8060408385031215611b8357611b82611ad8565b5b5f611b9085828601611b26565b9250506020611ba185828601611b59565b9150509250929050565b611bb481611b3a565b82525050565b5f602082019050611bcd5f830184611bab565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c0781611bd3565b8114611c11575f80fd5b50565b5f81359050611c2281611bfe565b92915050565b5f60208284031215611c3d57611c3c611ad8565b5b5f611c4a84828501611c14565b91505092915050565b5f8115159050919050565b611c6781611c53565b82525050565b5f602082019050611c805f830184611c5e565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611cd482611c8e565b810181811067ffffffffffffffff82111715611cf357611cf2611c9e565b5b80604052505050565b5f611d05611acf565b9050611d118282611ccb565b919050565b5f67ffffffffffffffff821115611d3057611d2f611c9e565b5b611d3982611c8e565b9050602081019050919050565b828183375f83830152505050565b5f611d66611d6184611d16565b611cfc565b905082815260208101848484011115611d8257611d81611c8a565b5b611d8d848285611d46565b509392505050565b5f82601f830112611da957611da8611c86565b5b8135611db9848260208601611d54565b91505092915050565b5f60208284031215611dd757611dd6611ad8565b5b5f82013567ffffffffffffffff811115611df457611df3611adc565b5b611e0084828501611d95565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f611e3b82611e09565b611e458185611e13565b9350611e55818560208601611e23565b611e5e81611c8e565b840191505092915050565b5f6020820190508181035f830152611e818184611e31565b905092915050565b5f60208284031215611e9e57611e9d611ad8565b5b5f611eab84828501611b59565b91505092915050565b5f67ffffffffffffffff821115611ece57611ecd611c9e565b5b602082029050602081019050919050565b5f80fd5b5f611ef5611ef084611eb4565b611cfc565b90508083825260208201905060208402830185811115611f1857611f17611edf565b5b835b81811015611f415780611f2d8882611b59565b845260208401935050602081019050611f1a565b5050509392505050565b5f82601f830112611f5f57611f5e611c86565b5b8135611f6f848260208601611ee3565b91505092915050565b5f67ffffffffffffffff821115611f9257611f91611c9e565b5b611f9b82611c8e565b9050602081019050919050565b5f611fba611fb584611f78565b611cfc565b905082815260208101848484011115611fd657611fd5611c8a565b5b611fe1848285611d46565b509392505050565b5f82601f830112611ffd57611ffc611c86565b5b813561200d848260208601611fa8565b91505092915050565b5f805f805f60a0868803121561202f5761202e611ad8565b5b5f61203c88828901611b26565b955050602061204d88828901611b26565b945050604086013567ffffffffffffffff81111561206e5761206d611adc565b5b61207a88828901611f4b565b935050606086013567ffffffffffffffff81111561209b5761209a611adc565b5b6120a788828901611f4b565b925050608086013567ffffffffffffffff8111156120c8576120c7611adc565b5b6120d488828901611fe9565b9150509295509295909350565b5f80fd5b5f8083601f8401126120fa576120f9611c86565b5b8235905067ffffffffffffffff811115612117576121166120e1565b5b60208301915083602082028301111561213357612132611edf565b5b9250929050565b5f80602083850312156121505761214f611ad8565b5b5f83013567ffffffffffffffff81111561216d5761216c611adc565b5b612179858286016120e5565b92509250509250929050565b5f67ffffffffffffffff82111561219f5761219e611c9e565b5b602082029050602081019050919050565b5f6121c26121bd84612185565b611cfc565b905080838252602082019050602084028301858111156121e5576121e4611edf565b5b835b8181101561220e57806121fa8882611b26565b8452602084019350506020810190506121e7565b5050509392505050565b5f82601f83011261222c5761222b611c86565b5b813561223c8482602086016121b0565b91505092915050565b5f806040838503121561225b5761225a611ad8565b5b5f83013567ffffffffffffffff81111561227857612277611adc565b5b61228485828601612218565b925050602083013567ffffffffffffffff8111156122a5576122a4611adc565b5b6122b185828601611f4b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6122ed81611b3a565b82525050565b5f6122fe83836122e4565b60208301905092915050565b5f602082019050919050565b5f612320826122bb565b61232a81856122c5565b9350612335836122d5565b805f5b8381101561236557815161234c88826122f3565b97506123578361230a565b925050600181019050612338565b5085935050505092915050565b5f6020820190508181035f83015261238a8184612316565b905092915050565b61239b81611aff565b82525050565b5f6020820190506123b45f830184612392565b92915050565b6123c381611c53565b81146123cd575f80fd5b50565b5f813590506123de816123ba565b92915050565b5f80604083850312156123fa576123f9611ad8565b5b5f61240785828601611b26565b9250506020612418858286016123d0565b9150509250929050565b5f806040838503121561243857612437611ad8565b5b5f61244585828601611b26565b925050602061245685828601611b26565b9150509250929050565b5f805f805f60a0868803121561247957612478611ad8565b5b5f61248688828901611b26565b955050602061249788828901611b26565b94505060406124a888828901611b59565b93505060606124b988828901611b59565b925050608086013567ffffffffffffffff8111156124da576124d9611adc565b5b6124e688828901611fe9565b9150509295509295909350565b5f6020828403121561250857612507611ad8565b5b5f61251584828501611b26565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061256257607f821691505b6020821081036125755761257461251e565b5b50919050565b5f60408201905061258e5f830185612392565b61259b6020830184612392565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6125fb6125f66125f1846125cf565b6125d8565b611b3a565b9050919050565b61260b816125e1565b82525050565b5f819050919050565b5f61263461262f61262a84612611565b6125d8565b611b3a565b9050919050565b6126448161261a565b82525050565b5f60408201905061265d5f830185612602565b61266a602083018461263b565b9392505050565b5f6040820190506126845f830185611bab565b6126916020830184611bab565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026126f47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826126b9565b6126fe86836126b9565b95508019841693508086168417925050509392505050565b5f61273061272b61272684611b3a565b6125d8565b611b3a565b9050919050565b5f819050919050565b61274983612716565b61275d61275582612737565b8484546126c5565b825550505050565b5f90565b612771612765565b61277c818484612740565b505050565b5b8181101561279f576127945f82612769565b600181019050612782565b5050565b601f8211156127e4576127b581612698565b6127be846126aa565b810160208510156127cd578190505b6127e16127d9856126aa565b830182612781565b50505b505050565b5f82821c905092915050565b5f6128045f19846008026127e9565b1980831691505092915050565b5f61281c83836127f5565b9150826002028217905092915050565b61283582611e09565b67ffffffffffffffff81111561284e5761284d611c9e565b5b612858825461254b565b6128638282856127a3565b5f60209050601f831160018114612894575f8415612882578287015190505b61288c8582612811565b8655506128f3565b601f1984166128a286612698565b5f5b828110156128c9578489015182556001820191506020850194506020810190506128a4565b868310156128e657848901516128e2601f8916826127f5565b8355505b6001600288020188555050505b505050505050565b5f60808201905061290e5f830187612392565b61291b6020830186611bab565b6129286040830185611bab565b6129356060830184611bab565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61297582611b3a565b915061298083611b3a565b92508282019050808211156129985761299761293e565b5b92915050565b5f6040820190508181035f8301526129b68185612316565b905081810360208301526129ca8184612316565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6129f7826129d3565b612a0181856129dd565b9350612a11818560208601611e23565b612a1a81611c8e565b840191505092915050565b5f60a082019050612a385f830188612392565b612a456020830187612392565b612a526040830186611bab565b612a5f6060830185611bab565b8181036080830152612a7181846129ed565b90509695505050505050565b5f81519050612a8b81611bfe565b92915050565b5f60208284031215612aa657612aa5611ad8565b5b5f612ab384828501612a7d565b91505092915050565b5f60a082019050612acf5f830188612392565b612adc6020830187612392565b8181036040830152612aee8186612316565b90508181036060830152612b028185612316565b90508181036080830152612b1681846129ed565b9050969550505050505056fea26469706673582212207d31d54996979d3b8e3cc3c4e5f611c3da8083d94eb183e4b66ad3621f27afbd64736f6c634300081a003368747470733a2f2f697066732e696f2f697066732f516d577a325157546235416277464c665737747867415067326f6d5a4139625658414e4e50534337566442767750