61016060405234801562000011575f80fd5b506040516200292e3803806200292e8339818101604052810190620000379190620004c0565b6040518060400160405280600581526020017f5354455448000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250836040518060400160405280600581526020017f53544554480000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f7374455448000000000000000000000000000000000000000000000000000000815250816003908162000122919062000754565b50806004908162000134919062000754565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001aa575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001a1919062000849565b60405180910390fd5b620001bb816200027460201b60201c565b50620001d26006836200033760201b90919060201c565b6101208181525050620001f06007826200033760201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506200022f6200038c60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505062000a34565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156200035c576200035483620003e860201b60201c565b905062000386565b826200036e836200045260201b60201c565b5f0190816200037e919062000754565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620003cd9594939291906200088f565b60405160208183030381529060405280519060200120905090565b5f80829050601f815111156200043757826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200042e919062000974565b60405180910390fd5b8051816200044590620009c5565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200048a826200045f565b9050919050565b6200049c816200047e565b8114620004a7575f80fd5b50565b5f81519050620004ba8162000491565b92915050565b5f60208284031215620004d857620004d76200045b565b5b5f620004e784828501620004aa565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200056c57607f821691505b60208210810362000582576200058162000527565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005a9565b620005f28683620005a9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200063c6200063662000630846200060a565b62000613565b6200060a565b9050919050565b5f819050919050565b62000657836200061c565b6200066f620006668262000643565b848454620005b5565b825550505050565b5f90565b6200068562000677565b620006928184846200064c565b505050565b5b81811015620006b957620006ad5f826200067b565b60018101905062000698565b5050565b601f8211156200070857620006d28162000588565b620006dd846200059a565b81016020851015620006ed578190505b62000705620006fc856200059a565b83018262000697565b50505b505050565b5f82821c905092915050565b5f6200072a5f19846008026200070d565b1980831691505092915050565b5f62000744838362000719565b9150826002028217905092915050565b6200075f82620004f0565b67ffffffffffffffff8111156200077b576200077a620004fa565b5b62000787825462000554565b62000794828285620006bd565b5f60209050601f831160018114620007ca575f8415620007b5578287015190505b620007c1858262000737565b86555062000830565b601f198416620007da8662000588565b5f5b828110156200080357848901518255600182019150602085019450602081019050620007dc565b868310156200082357848901516200081f601f89168262000719565b8355505b6001600288020188555050505b505050505050565b62000843816200047e565b82525050565b5f6020820190506200085e5f83018462000838565b92915050565b5f819050919050565b620008788162000864565b82525050565b62000889816200060a565b82525050565b5f60a082019050620008a45f8301886200086d565b620008b360208301876200086d565b620008c260408301866200086d565b620008d160608301856200087e565b620008e0608083018462000838565b9695505050505050565b5f82825260208201905092915050565b5f5b8381101562000919578082015181840152602081019050620008fc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200094082620004f0565b6200094c8185620008ea565b93506200095e818560208601620008fa565b620009698162000924565b840191505092915050565b5f6020820190508181035f8301526200098e818462000934565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f620009bc825162000864565b80915050919050565b5f620009d18262000996565b82620009dd84620009a0565b9050620009ea81620009af565b9250602082101562000a2d5762000a287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620005a9565b831692505b5050919050565b60805160a05160c05160e051610100516101205161014051611ea862000a865f395f610d4f01525f610d1401525f61124801525f61122701525f610a4901525f610a9f01525f610ac80152611ea85ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063715018a6116100a057806395d89b411161006f57806395d89b41146102ad578063a9059cbb146102cb578063d505accf146102fb578063dd62ed3e14610317578063f2fde38b1461034757610109565b8063715018a6146102315780637ecebe001461023b57806384b0196e1461026b5780638da5cb5b1461028f57610109565b8063313ce567116100dc578063313ce567146101a95780633644e515146101c757806340c10f19146101e557806370a082311461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b610115610363565b6040516101229190611718565b60405180910390f35b610145600480360381019061014091906117c9565b6103f3565b6040516101529190611821565b60405180910390f35b610163610415565b6040516101709190611849565b60405180910390f35b610193600480360381019061018e9190611862565b61041e565b6040516101a09190611821565b60405180910390f35b6101b161044c565b6040516101be91906118cd565b60405180910390f35b6101cf610454565b6040516101dc91906118fe565b60405180910390f35b6101ff60048036038101906101fa91906117c9565b610462565b005b61021b60048036038101906102169190611917565b610478565b6040516102289190611849565b60405180910390f35b6102396104bd565b005b61025560048036038101906102509190611917565b6104d0565b6040516102629190611849565b60405180910390f35b6102736104e1565b6040516102869796959493929190611a42565b60405180910390f35b610297610586565b6040516102a49190611ac4565b60405180910390f35b6102b56105ae565b6040516102c29190611718565b60405180910390f35b6102e560048036038101906102e091906117c9565b61063e565b6040516102f29190611821565b60405180910390f35b61031560048036038101906103109190611b31565b610660565b005b610331600480360381019061032c9190611bce565b6107a5565b60405161033e9190611849565b60405180910390f35b610361600480360381019061035c9190611917565b610827565b005b60606003805461037290611c39565b80601f016020809104026020016040519081016040528092919081815260200182805461039e90611c39565b80156103e95780601f106103c0576101008083540402835291602001916103e9565b820191905f5260205f20905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b5f806103fd6108ab565b905061040a8185856108b2565b600191505092915050565b5f600254905090565b5f806104286108ab565b90506104358582856108c4565b610440858585610956565b60019150509392505050565b5f6012905090565b5f61045d610a46565b905090565b61046a610afc565b6104748282610b83565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104c5610afc565b6104ce5f610c02565b565b5f6104da82610cc5565b9050919050565b5f6060805f805f60606104f2610d0b565b6104fa610d46565b46305f801b5f67ffffffffffffffff81111561051957610518611c69565b5b6040519080825280602002602001820160405280156105475781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105bd90611c39565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990611c39565b80156106345780601f1061060b57610100808354040283529160200191610634565b820191905f5260205f20905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b5f806106486108ab565b9050610655818585610956565b600191505092915050565b834211156106a557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161069c9190611849565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106d38c610d81565b896040516020016106e996959493929190611c96565b6040516020818303038152906040528051906020012090505f61070b82610dd4565b90505f61071a82878787610ded565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461078e57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610785929190611cf5565b60405180910390fd5b6107998a8a8a6108b2565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61082f610afc565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361089f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108969190611ac4565b60405180910390fd5b6108a881610c02565b50565b5f33905090565b6108bf8383836001610e1b565b505050565b5f6108cf84846107a5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109505781811015610941578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161093893929190611d1c565b60405180910390fd5b61094f84848484035f610e1b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109bd9190611ac4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a36575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a2d9190611ac4565b60405180910390fd5b610a41838383610fea565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610ac157507f000000000000000000000000000000000000000000000000000000000000000046145b15610aee577f00000000000000000000000000000000000000000000000000000000000000009050610af9565b610af6611203565b90505b90565b610b046108ab565b73ffffffffffffffffffffffffffffffffffffffff16610b22610586565b73ffffffffffffffffffffffffffffffffffffffff1614610b8157610b456108ab565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b789190611ac4565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf3575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610bea9190611ac4565b60405180910390fd5b610bfe5f8383610fea565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610d4160067f000000000000000000000000000000000000000000000000000000000000000061129890919063ffffffff16565b905090565b6060610d7c60077f000000000000000000000000000000000000000000000000000000000000000061129890919063ffffffff16565b905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610de6610de0610a46565b83611345565b9050919050565b5f805f80610dfd88888888611385565b925092509250610e0d828261146c565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e8b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e829190611ac4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610efb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ef29190611ac4565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fe4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fdb9190611849565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361103a578060025f82825461102e9190611d7e565b92505081905550611108565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110c3578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110ba93929190611d1c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361114f578060025f8282540392505081905550611199565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111f69190611849565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161127d959493929190611db1565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146112b4576112ad836115ce565b905061133f565b8180546112c090611c39565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec90611c39565b80156113375780601f1061130e57610100808354040283529160200191611337565b820191905f5260205f20905b81548152906001019060200180831161131a57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156113c1575f600385925092509250611462565b5f6001888888886040515f81526020016040526040516113e49493929190611e02565b6020604051602081039080840390855afa158015611404573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611455575f60015f801b93509350935050611462565b805f805f1b935093509350505b9450945094915050565b5f600381111561147f5761147e611e45565b5b82600381111561149257611491611e45565b5b03156115ca57600160038111156114ac576114ab611e45565b5b8260038111156114bf576114be611e45565b5b036114f6576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561150a57611509611e45565b5b82600381111561151d5761151c611e45565b5b0361156157805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016115589190611849565b60405180910390fd5b60038081111561157457611573611e45565b5b82600381111561158757611586611e45565b5b036115c957806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016115c091906118fe565b60405180910390fd5b5b5050565b60605f6115da83611640565b90505f602067ffffffffffffffff8111156115f8576115f7611c69565b5b6040519080825280601f01601f19166020018201604052801561162a5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115611685576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156116c55780820151818401526020810190506116aa565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6116ea8261168e565b6116f48185611698565b93506117048185602086016116a8565b61170d816116d0565b840191505092915050565b5f6020820190508181035f83015261173081846116e0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117658261173c565b9050919050565b6117758161175b565b811461177f575f80fd5b50565b5f813590506117908161176c565b92915050565b5f819050919050565b6117a881611796565b81146117b2575f80fd5b50565b5f813590506117c38161179f565b92915050565b5f80604083850312156117df576117de611738565b5b5f6117ec85828601611782565b92505060206117fd858286016117b5565b9150509250929050565b5f8115159050919050565b61181b81611807565b82525050565b5f6020820190506118345f830184611812565b92915050565b61184381611796565b82525050565b5f60208201905061185c5f83018461183a565b92915050565b5f805f6060848603121561187957611878611738565b5b5f61188686828701611782565b935050602061189786828701611782565b92505060406118a8868287016117b5565b9150509250925092565b5f60ff82169050919050565b6118c7816118b2565b82525050565b5f6020820190506118e05f8301846118be565b92915050565b5f819050919050565b6118f8816118e6565b82525050565b5f6020820190506119115f8301846118ef565b92915050565b5f6020828403121561192c5761192b611738565b5b5f61193984828501611782565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61197681611942565b82525050565b6119858161175b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6119bd81611796565b82525050565b5f6119ce83836119b4565b60208301905092915050565b5f602082019050919050565b5f6119f08261198b565b6119fa8185611995565b9350611a05836119a5565b805f5b83811015611a35578151611a1c88826119c3565b9750611a27836119da565b925050600181019050611a08565b5085935050505092915050565b5f60e082019050611a555f83018a61196d565b8181036020830152611a6781896116e0565b90508181036040830152611a7b81886116e0565b9050611a8a606083018761183a565b611a97608083018661197c565b611aa460a08301856118ef565b81810360c0830152611ab681846119e6565b905098975050505050505050565b5f602082019050611ad75f83018461197c565b92915050565b611ae6816118b2565b8114611af0575f80fd5b50565b5f81359050611b0181611add565b92915050565b611b10816118e6565b8114611b1a575f80fd5b50565b5f81359050611b2b81611b07565b92915050565b5f805f805f805f60e0888a031215611b4c57611b4b611738565b5b5f611b598a828b01611782565b9750506020611b6a8a828b01611782565b9650506040611b7b8a828b016117b5565b9550506060611b8c8a828b016117b5565b9450506080611b9d8a828b01611af3565b93505060a0611bae8a828b01611b1d565b92505060c0611bbf8a828b01611b1d565b91505092959891949750929550565b5f8060408385031215611be457611be3611738565b5b5f611bf185828601611782565b9250506020611c0285828601611782565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c5057607f821691505b602082108103611c6357611c62611c0c565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611ca95f8301896118ef565b611cb6602083018861197c565b611cc3604083018761197c565b611cd0606083018661183a565b611cdd608083018561183a565b611cea60a083018461183a565b979650505050505050565b5f604082019050611d085f83018561197c565b611d15602083018461197c565b9392505050565b5f606082019050611d2f5f83018661197c565b611d3c602083018561183a565b611d49604083018461183a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d8882611796565b9150611d9383611796565b9250828201905080821115611dab57611daa611d51565b5b92915050565b5f60a082019050611dc45f8301886118ef565b611dd160208301876118ef565b611dde60408301866118ef565b611deb606083018561183a565b611df8608083018461197c565b9695505050505050565b5f608082019050611e155f8301876118ef565b611e2260208301866118be565b611e2f60408301856118ef565b611e3c60608301846118ef565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122095c21e3411cb70c687727d22f71356b44480f872b3982810e819d4396b8bc65564736f6c63430008170033000000000000000000000000ff2047459bd91ee32130942e4e9d98d4d345457d